#include <stdio.h>
#include <sys/types.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    const char* filename = "myfile.txt";

    // 打开文件
    FILE* fp = fopen(filename, "w+");  // 读写模式，如果文件不存在则创建
    if (!fp) {
        printf("fopen error!\n");
        return 1;
    }

    // 写入文件
    int cnt = 1;
    while (cnt <= 10) {
        cnt++;
        const char* s = "hello world\n";
        fputs(s, fp);
    }

    //写入后重置文件指针到开头
    rewind(fp);  // 或者使用 fseek(fp, 0, SEEK_SET);

    // 读文件
    char buf[1024];

    printf("读取文件内容：\n");
    while (1) 
    {
        // 修正3：使用sizeof(buf)-1来确保有空间添加'\0'
        size_t s = fread(buf, 1, sizeof(buf) - 1, fp);
        if (s > 0) 
        {
            buf[s] = 0;  // 添加字符串结束符
            printf("%s", buf);
        }
        else 
        {
            // 修正4：在fread返回0时检查是否到达文件末尾
            if (feof(fp)) 
            {
                printf("\n已到达文件末尾\n");
                break;
            }
            else if (ferror(fp)) 
            {
                printf("读取文件时发生错误\n");
                break;
            }
        }
    }

    fclose(fp);
    printf("程序正常退出\n");
    return 0;
}

